<?php

namespace Biblibase\SiteBundle\Entity;

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContextInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\HttpFoundation\File\UploadedFile;

use Biblibase\SiteBundle\Validator\ClassementNum;

use Doctrine\ORM\Mapping as ORM;

/**
 * Livre
 *
 * @ORM\Table(name="livre")
 * @ORM\Entity(repositoryClass="Biblibase\SiteBundle\Entity\LivreRepository")
 * @UniqueEntity(fields="isbn", message="Cet ISBN existe déjà")
 * @ClassementNum()
 */
class Livre
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="titre", type="string", length=255, unique=false)
     * @Assert\NotBlank()
     */
    private $titre;

    /**
     * @var string
     *
     * @ORM\Column(name="annee", type="string", length=255, nullable=true)
     * @Assert\Regex(pattern="#^[0-9]*$#", message="L'année doit être un nombre")
     */
    private $annee;

    /**
     * @var string
     *
     * @ORM\Column(name="isbn", type="string", length=255, unique=true)
     * @Assert\NotBlank(message="L'ISBN ne peut pas être nul")
     * @Assert\Length(min=10, max=13, minMessage="La longueur de l'ISBN doit être de 13", maxMessage="La longueur de l'ISBN doit être de 13")
     * @Assert\Regex(pattern="#^[0-9]*$#", message="L'isbn doit être un nombre")
     */
    private $isbn;

    /**
     * @var string
     *
     * @ORM\Column(name="num", type="string", length=255, nullable=true)
     * @Assert\Regex(pattern="#^[0-9]*$#", message="Num doit être un nombre")
     */
    private $num;
    
    /**
   * @ORM\ManyToOne(targetEntity="Biblibase\SiteBundle\Entity\Classement")
   * @ORM\JoinColumn(nullable=true)
   */
    private $classement;
    
    /**
   * @ORM\ManyToOne(targetEntity="Biblibase\SiteBundle\Entity\Image", cascade={"persist"})
   * @ORM\JoinColumn(nullable=true)
   * @Assert\Valid()
   */
    private $image;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="text", nullable=true)
     */
    private $description;

	 /**
   * @ORM\ManyToOne(targetEntity="Biblibase\SiteBundle\Entity\Editeur", cascade={"persist"})
   * @ORM\JoinColumn(nullable=false)
   * @Assert\Valid()
   */
	 private $editeur;
	 
	 /**
   * @ORM\ManyToOne(targetEntity="Biblibase\SiteBundle\Entity\Collection", cascade={"persist"})
   * @ORM\JoinColumn(nullable=false)
   * @Assert\Valid()
   */
	 private $collection;
	 
	 /**
   * @ORM\ManyToMany(targetEntity="Biblibase\SiteBundle\Entity\Theme", cascade={"persist"})
   * @ORM\JoinColumn(nullable=true)
   * @Assert\Valid()
   */
   private $theme;
   
   /**
   * @ORM\ManyToMany(targetEntity="Biblibase\SiteBundle\Entity\Auteur", cascade={"persist"})
   * @ORM\JoinColumn(nullable=false)
   * @Assert\Valid()
   */
   private $auteur;
	
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set titre
     *
     * @param string $titre
     * @return Livre
     */
    public function setTitre($titre)
    {
        $this->titre = $titre;
    
        return $this;
    }

    /**
     * Get titre
     *
     * @return string 
     */
    public function getTitre()
    {
        return ucfirst($this->titre);
    }

    /**
     * Set annee
     *
     * @param string $annee
     * @return Livre
     */
    public function setAnnee($annee)
    {
        $this->annee = $annee;
    
        return $this;
    }

    /**
     * Get annee
     *
     * @return string 
     */
    public function getAnnee()
    {
        return $this->annee;
    }

    /**
     * Set isbn
     *
     * @param string $isbn
     * @return Livre
     */
    public function setIsbn($isbn)
    {
        $this->isbn = $isbn;
    
        return $this;
    }

    /**
     * Get isbn
     *
     * @return string 
     */
    public function getIsbn()
    {
        return $this->isbn;
    }

    /**
     * Set num
     *
     * @param string $num
     * @return Livre
     */
    public function setNum($num)
    {
        $this->num = $num;
    
        return $this;
    }

    /**
     * Get num
     *
     * @return string 
     */
    public function getNum()
    {
        return $this->num;
    }

    /**
     * Set description
     *
     * @param string $description
     * @return Livre
     */
    public function setDescription($description)
    {
        $this->description = $description;
    
        return $this;
    }

    /**
     * Get description
     *
     * @return string 
     */
    public function getDescription()
    {
        return ucfirst($this->description);
    }

    /**
     * Set image
     *
     * @param \Biblibase\SiteBundle\Entity\Image $image
     * @return Livre
     */
    public function setImage($image)
    {
        $this->image = $image;
        return $this;
    }

    /**
     * Get url
     *
     * @return \Biblibase\SiteBundle\Entity\Image
     */
    public function getImage()
    {
        return $this->image;
    }

    /**
     * Set editeur
     *
     * @param \Biblibase\SiteBundle\Entity\Editeur $editeur
     * @return Livre
     */
    public function setEditeur(\Biblibase\SiteBundle\Entity\Editeur $editeur)
    {
        $this->editeur = $editeur;
    
        return $this;
    }

    /**
     * Get editeur
     *
     * @return \Biblibase\SiteBundle\Entity\Editeur 
     */
    public function getEditeur()
    {
        return $this->editeur;
    }

    /**
     * Set collection
     *
     * @param \Biblibase\SiteBundle\Entity\Collection $collection
     * @return Livre
     */
    public function setCollection(\Biblibase\SiteBundle\Entity\Collection $collection)
    {
        $this->collection = $collection;
    
        return $this;
    }

    /**
     * Get collection
     *
     * @return \Biblibase\SiteBundle\Entity\Collection 
     */
    public function getCollection()
    {
        return $this->collection;
    }
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->theme = new \Doctrine\Common\Collections\ArrayCollection();
        $this->auteur = new \Doctrine\Common\Collections\ArrayCollection();
        
        $url = "default.jpg";
    }
    
    /**
     * Add themes
     *
     * @param \Biblibase\SiteBundle\Entity\Theme $themes
     * @return Livre
     */
    public function addTheme(\Biblibase\SiteBundle\Entity\Theme $theme)
    {
        $this->theme[] = $theme;
    
        return $this;
    }

    /**
     * Remove themes
     *
     * @param \Biblibase\SiteBundle\Entity\Theme $themes
     */
    public function removeTheme(\Biblibase\SiteBundle\Entity\Theme $theme)
    {
        $this->theme->removeElement($theme);
    }

    /**
     * Get themes
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getThemes()
    {
        return $this->theme;
    }
	
	 /**
     * Set themes
     *
     * @param \Doctrine\Common\Collections\Collection 
     * @return Livre 
     */
    public function setThemes($themes)
    {
        foreach($themes as $theme)
        {
        		$this->theme[] = $theme;
        }
        return $this;
    }
	 

    /**
     * Add auteur
     *
     * @param \Biblibase\SiteBundle\Entity\Auteur $auteur
     * @return Livre
     */
    public function addAuteur(\Biblibase\SiteBundle\Entity\Auteur $auteur)
    {
        $this->auteur[] = $auteur;
    
        return $this;
    }

    /**
     * Remove auteur
     *
     * @param \Biblibase\SiteBundle\Entity\Auteur $auteur
     */
    public function removeAuteur(\Biblibase\SiteBundle\Entity\Auteur $auteur)
    {
        $this->auteur->removeElement($auteur);
    }

    /**
     * Get auteur
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getAuteur()
    {
        return $this->auteur;
    }

	 /**
     * Set auteur
     *
     * @param \Doctrine\Common\Collections\Collection 
     * @return Livre 
     */
    public function setAuteur($auteurs)
    {
        foreach($auteurs as $auteur)
        {
        		$this->auteur[] = $auteur;
        }
        return $this;
    }

    /**
     * Set classement
     *
     * @param \Biblibase\SiteBundle\Entity\Classement $classement
     * @return Livre
     */
    public function setClassement(\Biblibase\SiteBundle\Entity\Classement $classement = null)
    {
        $this->classement = $classement;
    
        return $this;
    }

    /**
     * Get classement
     *
     * @return \Biblibase\SiteBundle\Entity\Classement 
     */
    public function getClassement()
    {
        return $this->classement;
    }

	 public function copier($livre)
	 {
		$this->setTitre($livre->getTitre());
		foreach($this->getAuteur() as $a)
			$this->removeAuteur($a);
		foreach($livre->getAuteur() as $a)
		{
			$au = new Auteur();
			$au->setNom($a->getNom());
			$this->addAuteur($au);
		}
		
		$e = new Editeur();
		$e->setNom($e);
		$this->setEditeur($livre->getEditeur());
		$c = new Collection();
		$c->setNom($livre->getEditeur()->getNom());
		$this->setCollection($c);
		$this->setNum($livre->getNum());
		$this->setIsbn($livre->getIsbn());
		$this->setDescription($livre->getDescription());
		if($livre->getImage() != NULL)
		{	
			$this->setImage($livre->getImage());
		}
		if($livre->getThemes() != NULL)
			$this->setThemes($livre->getThemes());
		if($livre->getClassement() != NULL)
			$this->setClassement($livre->getClassement());
		$this->setAnnee($livre->getAnnee());	 
	 }

}